// eslint-disable
window.SockJS = (function() {
  var a = document,
    b = window,
    c = {},
    d = function() {}
  d.prototype.addEventListener = function(a, b) {
    this._listeners || (this._listeners = {}), a in this._listeners || (this._listeners[a] = [])
    var d = this._listeners[a]
    c.arrIndexOf(d, b) === -1 && d.push(b)
    return
  }, d.prototype.removeEventListener = function(a, b) {
    if (!(this._listeners && a in this._listeners)) return
    var d = this._listeners[a],
      e = c.arrIndexOf(d, b)
    if (e !== -1) {
      d.length > 1 ? this._listeners[a] = d.slice(0, e).concat(d.slice(e + 1)) : delete this._listeners[a]
      return
    }
    return
  }, d.prototype.dispatchEvent = function(a) {
    var b = a.type,
      c = Array.prototype.slice.call(arguments, 0)
    this["on" + b] && this["on" + b].apply(this, c)
    if (this._listeners && b in this._listeners) { for (var d = 0; d < this._listeners[b].length; d++) this._listeners[b][d].apply(this, c) }
  }
  var e = function(a, b) {
    this.type = a
    if (typeof b !== "undefined") {
      for (var c in b) {
        if (!b.hasOwnProperty(c)) continue
        this[c] = b[c]
      }
    }
  }
  e.prototype.toString = function() {
    var a = []
    for (var b in this) {
      if (!this.hasOwnProperty(b)) continue
      var c = this[b]
      typeof c === "function" && (c = "[function]"), a.push(b + "=" + c)
    }
    return "SimpleEvent(" + a.join(", ") + ")"
  }
  var f = function(a) {
    var b = this
    b._events = a || [], b._listeners = {}
  }
  f.prototype.emit = function(a) {
    var b = this
    b._verifyType(a)
    if (b._nuked) return
    var c = Array.prototype.slice.call(arguments, 1)
    b["on" + a] && b["on" + a].apply(b, c)
    if (a in b._listeners) { for (var d = 0; d < b._listeners[a].length; d++) b._listeners[a][d].apply(b, c) }
  }, f.prototype.on = function(a, b) {
    var c = this
    c._verifyType(a)
    if (c._nuked) return
    a in c._listeners || (c._listeners[a] = []), c._listeners[a].push(b)
  }, f.prototype._verifyType = function(a) {
    var b = this
    c.arrIndexOf(b._events, a) === -1 && c.log("Event " + JSON.stringify(a) + " not listed " + JSON.stringify(b._events) + " in " + b)
  }, f.prototype.nuke = function() {
    var a = this
    a._nuked = !0
    for (var b = 0; b < a._events.length; b++) delete a[a._events[b]]
    a._listeners = {}
  }
  var g = "abcdefghijklmnopqrstuvwxyz0123456789_"
  c.random_string = function(a, b) {
    b = b || g.length
    var c, d = []
    for (c = 0; c < a; c++) d.push(g.substr(Math.floor(Math.random() * b), 1))
    return d.join("")
  }, c.random_number = function(a) {
    return Math.floor(Math.random() * a)
  }, c.random_number_string = function(a) {
    var b = ("" + (a - 1)).length,
      d = Array(b + 1).join("0")
    return (d + c.random_number(a)).slice(-b)
  }, c.getOrigin = function(a) {
    a += "/"
    var b = a.split("/").slice(0, 3)
    return b.join("/")
  }, c.isSameOriginUrl = function(a, c) {
    return c || (c = b.location.href), a.split("/").slice(0, 3).join("/") === c.split("/").slice(0, 3).join("/")
  }, c.getParentDomain = function(a) {
    if (/^[0-9.]*$/.test(a)) return a
    if (/^\[/.test(a)) return a
    if (!/[.]/.test(a)) return a
    var b = a.split(".").slice(1)
    return b.join(".")
  }, c.objectExtend = function(a, b) {
    for (var c in b) b.hasOwnProperty(c) && (a[c] = b[c])
    return a
  }
  var h = "_jp"
  c.polluteGlobalNamespace = function() {
    h in b || (b[h] = {})
  }, c.closeFrame = function(a, b) {
    return "c" + JSON.stringify([a, b])
  }, c.userSetCode = function(a) {
    return a === 1e3 || a >= 3e3 && a <= 4999
  }, c.countRTO = function(a) {
    var b
    return a > 100 ? b = 3 * a : b = a + 200, b
  }, c.log = function() {
    b.console && console.log && console.log.apply && console.log.apply(console, arguments)
  }, c.bind = function(a, b) {
    return a.bind ? a.bind(b) : function() {
      return a.apply(b, arguments)
    }
  }, c.flatUrl = function(a) {
    return a.indexOf("?") === -1 && a.indexOf("#") === -1
  }, c.amendUrl = function(b) {
    var d = a.location
    if (!b) throw new Error("Wrong url for SockJS")
    if (!c.flatUrl(b)) throw new Error("Only basic urls are supported in SockJS")
    return b.indexOf("//") === 0 && (b = d.protocol + b), b.indexOf("/") === 0 && (b = d.protocol + "//" + d.host + b), b = b.replace(/[/]+$/, ""), b
  }, c.arrIndexOf = function(a, b) {
    for (var c = 0; c < a.length; c++) { if (a[c] === b) return c }
    return -1
  }, c.arrSkip = function(a, b) {
    var d = c.arrIndexOf(a, b)
    if (d === -1) return a.slice()
    var e = a.slice(0, d)
    return e.concat(a.slice(d + 1))
  }, c.isArray = Array.isArray || function(a) {
    return {}.toString.call(a).indexOf("Array") >= 0
  }, c.delay = function(a, b) {
    return typeof a === "function" && (b = a, a = 0), setTimeout(b, a)
  }
  var i = /[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,
    j = {
      "\0": "\\u0000",
      "\x01": "\\u0001",
      "\x02": "\\u0002",
      "\x03": "\\u0003",
      "\x04": "\\u0004",
      "\x05": "\\u0005",
      "\x06": "\\u0006",
      "\x07": "\\u0007",
      "\b": "\\b",
      "\t": "\\t",
      "\n": "\\n",
      "\x0b": "\\u000b",
      "\f": "\\f",
      "\r": "\\r",
      "\x0e": "\\u000e",
      "\x0f": "\\u000f",
      "\x10": "\\u0010",
      "\x11": "\\u0011",
      "\x12": "\\u0012",
      "\x13": "\\u0013",
      "\x14": "\\u0014",
      "\x15": "\\u0015",
      "\x16": "\\u0016",
      "\x17": "\\u0017",
      "\x18": "\\u0018",
      "\x19": "\\u0019",
      "\x1a": "\\u001a",
      "\x1b": "\\u001b",
      "\x1c": "\\u001c",
      "\x1d": "\\u001d",
      "\x1e": "\\u001e",
      "\x1f": "\\u001f",
      '"': '\\"',
      "\\": "\\\\",
      "\x7f": "\\u007f",
      "\x80": "\\u0080",
      "\x81": "\\u0081",
      "\x82": "\\u0082",
      "\x83": "\\u0083",
      "\x84": "\\u0084",
      "\x85": "\\u0085",
      "\x86": "\\u0086",
      "\x87": "\\u0087",
      "\x88": "\\u0088",
      "\x89": "\\u0089",
      "\x8a": "\\u008a",
      "\x8b": "\\u008b",
      "\x8c": "\\u008c",
      "\x8d": "\\u008d",
      "\x8e": "\\u008e",
      "\x8f": "\\u008f",
      "\x90": "\\u0090",
      "\x91": "\\u0091",
      "\x92": "\\u0092",
      "\x93": "\\u0093",
      "\x94": "\\u0094",
      "\x95": "\\u0095",
      "\x96": "\\u0096",
      "\x97": "\\u0097",
      "\x98": "\\u0098",
      "\x99": "\\u0099",
      "\x9a": "\\u009a",
      "\x9b": "\\u009b",
      "\x9c": "\\u009c",
      "\x9d": "\\u009d",
      "\x9e": "\\u009e",
      "\x9f": "\\u009f",
      "\xad": "\\u00ad",
      "\u0600": "\\u0600",
      "\u0601": "\\u0601",
      "\u0602": "\\u0602",
      "\u0603": "\\u0603",
      "\u0604": "\\u0604",
      "\u070f": "\\u070f",
      "\u17b4": "\\u17b4",
      "\u17b5": "\\u17b5",
      "\u200c": "\\u200c",
      "\u200d": "\\u200d",
      "\u200e": "\\u200e",
      "\u200f": "\\u200f",
      "\u2028": "\\u2028",
      "\u2029": "\\u2029",
      "\u202a": "\\u202a",
      "\u202b": "\\u202b",
      "\u202c": "\\u202c",
      "\u202d": "\\u202d",
      "\u202e": "\\u202e",
      "\u202f": "\\u202f",
      "\u2060": "\\u2060",
      "\u2061": "\\u2061",
      "\u2062": "\\u2062",
      "\u2063": "\\u2063",
      "\u2064": "\\u2064",
      "\u2065": "\\u2065",
      "\u2066": "\\u2066",
      "\u2067": "\\u2067",
      "\u2068": "\\u2068",
      "\u2069": "\\u2069",
      "\u206a": "\\u206a",
      "\u206b": "\\u206b",
      "\u206c": "\\u206c",
      "\u206d": "\\u206d",
      "\u206e": "\\u206e",
      "\u206f": "\\u206f",
      "\ufeff": "\\ufeff",
      "\ufff0": "\\ufff0",
      "\ufff1": "\\ufff1",
      "\ufff2": "\\ufff2",
      "\ufff3": "\\ufff3",
      "\ufff4": "\\ufff4",
      "\ufff5": "\\ufff5",
      "\ufff6": "\\ufff6",
      "\ufff7": "\\ufff7",
      "\ufff8": "\\ufff8",
      "\ufff9": "\\ufff9",
      "\ufffa": "\\ufffa",
      "\ufffb": "\\ufffb",
      "\ufffc": "\\ufffc",
      "\ufffd": "\\ufffd",
      "\ufffe": "\\ufffe",
      "\uffff": "\\uffff"
    },
    k = /[\x00-\x1f\ud800-\udfff\ufffe\uffff\u0300-\u0333\u033d-\u0346\u034a-\u034c\u0350-\u0352\u0357-\u0358\u035c-\u0362\u0374\u037e\u0387\u0591-\u05af\u05c4\u0610-\u0617\u0653-\u0654\u0657-\u065b\u065d-\u065e\u06df-\u06e2\u06eb-\u06ec\u0730\u0732-\u0733\u0735-\u0736\u073a\u073d\u073f-\u0741\u0743\u0745\u0747\u07eb-\u07f1\u0951\u0958-\u095f\u09dc-\u09dd\u09df\u0a33\u0a36\u0a59-\u0a5b\u0a5e\u0b5c-\u0b5d\u0e38-\u0e39\u0f43\u0f4d\u0f52\u0f57\u0f5c\u0f69\u0f72-\u0f76\u0f78\u0f80-\u0f83\u0f93\u0f9d\u0fa2\u0fa7\u0fac\u0fb9\u1939-\u193a\u1a17\u1b6b\u1cda-\u1cdb\u1dc0-\u1dcf\u1dfc\u1dfe\u1f71\u1f73\u1f75\u1f77\u1f79\u1f7b\u1f7d\u1fbb\u1fbe\u1fc9\u1fcb\u1fd3\u1fdb\u1fe3\u1feb\u1fee-\u1fef\u1ff9\u1ffb\u1ffd\u2000-\u2001\u20d0-\u20d1\u20d4-\u20d7\u20e7-\u20e9\u2126\u212a-\u212b\u2329-\u232a\u2adc\u302b-\u302c\uaab2-\uaab3\uf900-\ufa0d\ufa10\ufa12\ufa15-\ufa1e\ufa20\ufa22\ufa25-\ufa26\ufa2a-\ufa2d\ufa30-\ufa6d\ufa70-\ufad9\ufb1d\ufb1f\ufb2a-\ufb36\ufb38-\ufb3c\ufb3e\ufb40-\ufb41\ufb43-\ufb44\ufb46-\ufb4e\ufff0-\uffff]/g,
    l, m = JSON && JSON.stringify || function(a) {
      return i.lastIndex = 0, i.test(a) && (a = a.replace(i, function(a) {
        return j[a]
      })), '"' + a + '"'
    },
    n = function(a) {
      var b, c = {},
        d = []
      for (b = 0; b < 65536; b++) d.push(String.fromCharCode(b))
      return a.lastIndex = 0, d.join("").replace(a, function(a) {
        return c[a] = "\\u" + ("0000" + a.charCodeAt(0).toString(16)).slice(-4), ""
      }), a.lastIndex = 0, c
    }
  c.quote = function(a) {
    var b = m(a)
    return k.lastIndex = 0, k.test(b) ? (l || (l = n(k)), b.replace(k, function(a) {
      return l[a]
    })) : b
  }
  var o = ["websocket", "xdr-streaming", "xhr-streaming", "iframe-eventsource", "iframe-htmlfile", "xdr-polling", "xhr-polling", "iframe-xhr-polling", "jsonp-polling"]
  c.probeProtocols = function() {
    var a = {}
    for (var b = 0; b < o.length; b++) {
      var c = o[b]
      a[c] = y[c] && y[c].enabled()
    }
    return a
  }, c.detectProtocols = function(a, b, c) {
    var d = {},
      e = []
    b || (b = o)
    for (var f = 0; f < b.length; f++) {
      var g = b[f]
      d[g] = a[g]
    }
    var h = function(a) {
      var b = a.shift()
      d[b] ? e.push(b) : a.length > 0 && h(a)
    }
    return c.websocket !== !1 && h(["websocket"]), d["xhr-streaming"] && !c.null_origin ? e.push("xhr-streaming") : d["xdr-streaming"] && !c.cookie_needed && !c.null_origin ? e.push("xdr-streaming") : h(["iframe-eventsource", "iframe-htmlfile"]), d["xhr-polling"] && !c.null_origin ? e.push("xhr-polling") : d["xdr-polling"] && !c.cookie_needed && !c.null_origin ? e.push("xdr-polling") : h(["iframe-xhr-polling", "jsonp-polling"]), e
  }
  var p = "_sockjs_global"
  c.createHook = function() {
    var a = "a" + c.random_string(8)
    if (!(p in b)) {
      var d = {}
      b[p] = function(a) {
        return a in d || (d[a] = {
          id: a,
          del: function() {
            delete d[a]
          }
        }), d[a]
      }
    }
    return b[p](a)
  }, c.attachMessage = function(a) {
    c.attachEvent("message", a)
  }, c.attachEvent = function(c, d) {
    typeof b.addEventListener !== "undefined" ? b.addEventListener(c, d, !1) : (a.attachEvent("on" + c, d), b.attachEvent("on" + c, d))
  }, c.detachMessage = function(a) {
    c.detachEvent("message", a)
  }, c.detachEvent = function(c, d) {
    typeof b.addEventListener !== "undefined" ? b.removeEventListener(c, d, !1) : (a.detachEvent("on" + c, d), b.detachEvent("on" + c, d))
  }
  var q = {},
    r = !1,
    s = function() {
      for (var a in q) q[a](), delete q[a]
    },
    t = function() {
      if (r) return
      r = !0, s()
    }
  c.attachEvent("unload", t), c.unload_add = function(a) {
    var b = c.random_string(8)
    return q[b] = a, r && c.delay(s), b
  }, c.unload_del = function(a) {
    a in q && delete q[a]
  }, c.createIframe = function(b, d) {
    var e = a.createElement("iframe"),
      f, g, h = function() {
        clearTimeout(f)
        try {
          e.onload = null
        } catch (a) {}
        e.onerror = null
      },
      i = function() {
        e && (h(), setTimeout(function() {
          e && e.parentNode.removeChild(e), e = null
        }, 0), c.unload_del(g))
      },
      j = function(a) {
        e && (i(), d(a))
      },
      k = function(a, b) {
        try {
          e && e.contentWindow && e.contentWindow.postMessage(a, b)
        } catch (c) {}
      }
    return e.src = b, e.style.display = "none", e.style.position = "absolute", e.onerror = function() {
      j("onerror")
    }, e.onload = function() {
      clearTimeout(f), f = setTimeout(function() {
        j("onload timeout")
      }, 2e3)
    }, a.body.appendChild(e), f = setTimeout(function() {
      j("timeout")
    }, 15e3), g = c.unload_add(i), {
      post: k,
      cleanup: i,
      loaded: h
    }
  }, c.createHtmlfile = function(a, d) {
    var e = new ActiveXObject("htmlfile"),
      f, g, i, j = function() {
        clearTimeout(f)
      },
      k = function() {
        e && (j(), c.unload_del(g), i.parentNode.removeChild(i), i = e = null, CollectGarbage())
      },
      l = function(a) {
        e && (k(), d(a))
      },
      m = function(a, b) {
        try {
          i && i.contentWindow && i.contentWindow.postMessage(a, b)
        } catch (c) {}
      }
    e.open(), e.write('<html><script>document.domain="' + document.domain + '";' + "</s" + "cript></html>"), e.close(), e.parentWindow[h] = b[h]
    var n = e.createElement("div")
    return e.body.appendChild(n), i = e.createElement("iframe"), n.appendChild(i), i.src = a, f = setTimeout(function() {
      l("timeout")
    }, 15e3), g = c.unload_add(k), {
      post: m,
      cleanup: k,
      loaded: j
    }
  }
  var u = function() {}
  u.prototype = new f(["chunk", "finish"]), u.prototype._start = function(a, d, e, f) {
    var g = this
    try {
      g.xhr = new XMLHttpRequest()
    } catch (h) {}
    if (!g.xhr) {
      try {
        g.xhr = new b.ActiveXObject("Microsoft.XMLHTTP")
      } catch (h) {}
    }
    if (b.ActiveXObject || b.XDomainRequest) d += (d.indexOf("?") === -1 ? "?" : "&") + "t=" + +(new Date())
    g.unload_ref = c.unload_add(function() {
      g._cleanup(!0)
    })
    try {
      g.xhr.open(a, d, !0)
    } catch (i) {
      g.emit("finish", 0, ""), g._cleanup()
      return
    }
    if (!f || !f.no_credentials) g.xhr.withCredentials = "true"
    if (f && f.headers) { for (var j in f.headers) g.xhr.setRequestHeader(j, f.headers[j]) }
    g.xhr.onreadystatechange = function() {
      if (g.xhr) {
        var a = g.xhr
        switch (a.readyState) {
          case 3:
            try {
              var b = a.status,
                c = a.responseText
            } catch (a) {}
            b === 1223 && (b = 204), c && c.length > 0 && g.emit("chunk", b, c)
            break
          case 4:
            var b = a.status
            b === 1223 && (b = 204), g.emit("finish", b, a.responseText), g._cleanup(!1)
        }
      }
    }, g.xhr.send(e)
  }, u.prototype._cleanup = function(a) {
    var b = this
    if (!b.xhr) return
    c.unload_del(b.unload_ref), b.xhr.onreadystatechange = function() {}
    if (a) {
      try {
        b.xhr.abort()
      } catch (d) {}
    }
    b.unload_ref = b.xhr = null
  }, u.prototype.close = function() {
    var a = this
    a.nuke(), a._cleanup(!0)
  }
  var v = c.XHRCorsObject = function() {
    var a = this,
      b = arguments
    c.delay(function() {
      a._start.apply(a, b)
    })
  }
  v.prototype = new u()
  var w = c.XHRLocalObject = function(a, b, d) {
    var e = this
    c.delay(function() {
      e._start(a, b, d, {
        no_credentials: !0
      })
    })
  }
  w.prototype = new u()
  var x = c.XDRObject = function(a, b, d) {
    var e = this
    c.delay(function() {
      e._start(a, b, d)
    })
  }
  x.prototype = new f(["chunk", "finish"]), x.prototype._start = function(a, b, d) {
    var e = this,
      f = new XDomainRequest()
    b += (b.indexOf("?") === -1 ? "?" : "&") + "t=" + +(new Date())
    var g = f.ontimeout = f.onerror = function() {
      e.emit("finish", 0, ""), e._cleanup(!1)
    }
    f.onprogress = function() {
      e.emit("chunk", 200, f.responseText)
    }, f.onload = function() {
      e.emit("finish", 200, f.responseText), e._cleanup(!1)
    }, e.xdr = f, e.unload_ref = c.unload_add(function() {
      e._cleanup(!0)
    })
    try {
      e.xdr.open(a, b), e.xdr.send(d)
    } catch (h) {
      g()
    }
  }, x.prototype._cleanup = function(a) {
    var b = this
    if (!b.xdr) return
    c.unload_del(b.unload_ref), b.xdr.ontimeout = b.xdr.onerror = b.xdr.onprogress = b.xdr.onload = null
    if (a) {
      try {
        b.xdr.abort()
      } catch (d) {}
    }
    b.unload_ref = b.xdr = null
  }, x.prototype.close = function() {
    var a = this
    a.nuke(), a._cleanup(!0)
  }, c.isXHRCorsCapable = function() {
    return b.XMLHttpRequest && "withCredentials" in new XMLHttpRequest() ? 1 : b.XDomainRequest && a.domain ? 2 : L.enabled() ? 3 : 4
  }
  var y = function(a, d, e) {
    if (this === b) return new y(a, d, e)
    var f = this,
      g
    f._options = {
      devel: !1,
      debug: !1,
      protocols_whitelist: [],
      info: undefined,
      rtt: undefined
    }, e && c.objectExtend(f._options, e), f._base_url = c.amendUrl(a), f._server = f._options.server || c.random_number_string(1e3), f._options.protocols_whitelist && f._options.protocols_whitelist.length ? g = f._options.protocols_whitelist : (typeof d === "string" && d.length > 0 ? g = [d] : c.isArray(d) ? g = d : g = null, g && f._debug('Deprecated API: Use "protocols_whitelist" option instead of supplying protocol list as a second parameter to SockJS constructor.')), f._protocols = [], f.protocol = null, f.readyState = y.CONNECTING, f._ir = S(f._base_url), f._ir.onfinish = function(a, b) {
      f._ir = null, a ? (f._options.info && (a = c.objectExtend(a, f._options.info)), f._options.rtt && (b = f._options.rtt), f._applyInfo(a, b, g), f._didClose()) : f._didClose(1002, "Can't connect to server", !0)
    }
  }
  y.prototype = new d(), y.version = "0.3.4", y.CONNECTING = 0, y.OPEN = 1, y.CLOSING = 2, y.CLOSED = 3, y.prototype._debug = function() {
    this._options.debug && c.log.apply(c, arguments)
  }, y.prototype._dispatchOpen = function() {
    var a = this
    a.readyState === y.CONNECTING ? (a._transport_tref && (clearTimeout(a._transport_tref), a._transport_tref = null), a.readyState = y.OPEN, a.dispatchEvent(new e("open"))) : a._didClose(1006, "Server lost session")
  }, y.prototype._dispatchMessage = function(a) {
    var b = this
    if (b.readyState !== y.OPEN) return
    b.dispatchEvent(new e("message", {
      data: a
    }))
  }, y.prototype._dispatchHeartbeat = function(a) {
    var b = this
    if (b.readyState !== y.OPEN) return
    b.dispatchEvent(new e("heartbeat", {}))
  }, y.prototype._didClose = function(a, b, d) {
    var f = this
    if (f.readyState !== y.CONNECTING && f.readyState !== y.OPEN && f.readyState !== y.CLOSING) throw new Error("INVALID_STATE_ERR")
    f._ir && (f._ir.nuke(), f._ir = null), f._transport && (f._transport.doCleanup(), f._transport = null)
    var g = new e("close", {
      code: a,
      reason: b,
      wasClean: c.userSetCode(a)
    })
    if (!c.userSetCode(a) && f.readyState === y.CONNECTING && !d) {
      if (f._try_next_protocol(g)) return
      g = new e("close", {
        code: 2e3,
        reason: "All transports failed",
        wasClean: !1,
        last_event: g
      })
    }
    f.readyState = y.CLOSED, c.delay(function() {
      f.dispatchEvent(g)
    })
  }, y.prototype._didMessage = function(a) {
    var b = this,
      c = a.slice(0, 1)
    switch (c) {
      case "o":
        b._dispatchOpen()
        break
      case "a":
        var d = JSON.parse(a.slice(1) || "[]")
        for (var e = 0; e < d.length; e++) b._dispatchMessage(d[e])
        break
      case "m":
        var d = JSON.parse(a.slice(1) || "null")
        b._dispatchMessage(d)
        break
      case "c":
        var d = JSON.parse(a.slice(1) || "[]")
        b._didClose(d[0], d[1])
        break
      case "h":
        b._dispatchHeartbeat()
    }
  }, y.prototype._try_next_protocol = function(b) {
    var d = this
    d.protocol && (d._debug("Closed transport:", d.protocol, "" + b), d.protocol = null), d._transport_tref && (clearTimeout(d._transport_tref), d._transport_tref = null)
    for (;;) {
      var e = d.protocol = d._protocols.shift()
      if (!e) return !1
      if (y[e] && y[e].need_body === !0 && (!a.body || typeof a.readyState !== "undefined" && a.readyState !== "complete")) {
        return d._protocols.unshift(e), d.protocol = "waiting-for-load", c.attachEvent("load", function() {
          d._try_next_protocol()
        }), !0
      }
      if (!!y[e] && !!y[e].enabled(d._options)) {
        var f = y[e].roundTrips || 1,
          g = (d._options.rto || 0) * f || 5e3
        d._transport_tref = c.delay(g, function() {
          d.readyState === y.CONNECTING && d._didClose(2007, "Transport timeouted")
        })
        var h = c.random_string(8),
          i = d._base_url + "/" + d._server + "/" + h
        return d._debug("Opening transport:", e, " url:" + i, " RTO:" + d._options.rto), d._transport = new y[e](d, i, d._base_url), !0
      }
      d._debug("Skipping transport:", e)
    }
  }, y.prototype.close = function(a, b) {
    var d = this
    if (a && !c.userSetCode(a)) throw new Error("INVALID_ACCESS_ERR")
    return d.readyState !== y.CONNECTING && d.readyState !== y.OPEN ? !1 : (d.readyState = y.CLOSING, d._didClose(a || 1e3, b || "Normal closure"), !0)
  }, y.prototype.send = function(a) {
    var b = this
    if (b.readyState === y.CONNECTING) throw new Error("INVALID_STATE_ERR")
    return b.readyState === y.OPEN && b._transport.doSend(c.quote("" + a)), !0
  }, y.prototype._applyInfo = function(b, d, e) {
    var f = this
    f._options.info = b, f._options.rtt = d, f._options.rto = c.countRTO(d), f._options.info.null_origin = !a.domain
    var g = c.probeProtocols()
    f._protocols = c.detectProtocols(g, e, b)
  }
  var z = y.websocket = function(a, d) {
    var e = this,
      f = d + "/websocket"
    f.slice(0, 5) === "https" ? f = "wss" + f.slice(5) : f = "ws" + f.slice(4), e.ri = a, e.url = f
    var g = b.WebSocket || b.MozWebSocket
    e.ws = new g(e.url), e.ws.onmessage = function(a) {
      e.ri._didMessage(a.data)
    }, e.unload_ref = c.unload_add(function() {
      e.ws.close()
    }), e.ws.onclose = function() {
      e.ri._didMessage(c.closeFrame(1006, "WebSocket connection broken"))
    }
  }
  z.prototype.doSend = function(a) {
    this.ws.send("[" + a + "]")
  }, z.prototype.doCleanup = function() {
    var a = this,
      b = a.ws
    b && (b.onmessage = b.onclose = null, b.close(), c.unload_del(a.unload_ref), a.unload_ref = a.ri = a.ws = null)
  }, z.enabled = function() {
    return !!b.WebSocket || !!b.MozWebSocket
  }, z.roundTrips = 2
  var A = function() {}
  A.prototype.send_constructor = function(a) {
    var b = this
    b.send_buffer = [], b.sender = a
  }, A.prototype.doSend = function(a) {
    var b = this
    b.send_buffer.push(a), b.send_stop || b.send_schedule()
  }, A.prototype.send_schedule_wait = function() {
    var a = this,
      b
    a.send_stop = function() {
      a.send_stop = null, clearTimeout(b)
    }, b = c.delay(25, function() {
      a.send_stop = null, a.send_schedule()
    })
  }, A.prototype.send_schedule = function() {
    var a = this
    if (a.send_buffer.length > 0) {
      var b = "[" + a.send_buffer.join(",") + "]"
      a.send_stop = a.sender(a.trans_url, b, function(b, c) {
        a.send_stop = null, b === !1 ? a.ri._didClose(1006, "Sending error " + c) : a.send_schedule_wait()
      }), a.send_buffer = []
    }
  }, A.prototype.send_destructor = function() {
    var a = this
    a._send_stop && a._send_stop(), a._send_stop = null
  }
  var B = function(b, d, e) {
      var f = this
      if (!("_send_form" in f)) {
        var g = f._send_form = a.createElement("form"),
          h = f._send_area = a.createElement("textarea")
        h.name = "d", g.style.display = "none", g.style.position = "absolute", g.method = "POST", g.enctype = "application/x-www-form-urlencoded", g.acceptCharset = "UTF-8", g.appendChild(h), a.body.appendChild(g)
      }
      var g = f._send_form,
        h = f._send_area,
        i = "a" + c.random_string(8)
      g.target = i, g.action = b + "/jsonp_send?i=" + i
      var j
      try {
        j = a.createElement('<iframe name="' + i + '">')
      } catch (k) {
        j = a.createElement("iframe"), j.name = i
      }
      j.id = i, g.appendChild(j), j.style.display = "none"
      try {
        h.value = d
      } catch (l) {
        c.log("Your browser is seriously broken. Go home! " + l.message)
      }
      g.submit()
      var m = function(a) {
        if (!j.onerror) return
        j.onreadystatechange = j.onerror = j.onload = null, c.delay(500, function() {
          j.parentNode.removeChild(j), j = null
        }), h.value = "", e(!0)
      }
      return j.onerror = j.onload = m, j.onreadystatechange = function(a) {
        j.readyState == "complete" && m()
      }, m
    },
    C = function(a) {
      return function(b, c, d) {
        var e = new a("POST", b + "/xhr_send", c)
        return e.onfinish = function(a, b) {
          d(a === 200 || a === 204, "http status " + a)
        },
        function(a) {
          d(!1, a)
        }
      }
    },
    D = function(b, d) {
      var e, f = a.createElement("script"),
        g, h = function(a) {
          g && (g.parentNode.removeChild(g), g = null), f && (clearTimeout(e), f.parentNode.removeChild(f), f.onreadystatechange = f.onerror = f.onload = f.onclick = null, f = null, d(a), d = null)
        },
        i = !1,
        j = null
      f.id = "a" + c.random_string(8), f.src = b, f.type = "text/javascript", f.charset = "UTF-8", f.onerror = function(a) {
        j || (j = setTimeout(function() {
          i || h(c.closeFrame(1006, "JSONP script loaded abnormally (onerror)"))
        }, 1e3))
      }, f.onload = function(a) {
        h(c.closeFrame(1006, "JSONP script loaded abnormally (onload)"))
      }, f.onreadystatechange = function(a) {
        if (/loaded|closed/.test(f.readyState)) {
          if (f && f.htmlFor && f.onclick) {
            i = !0
            try {
              f.onclick()
            } catch (b) {}
          }
          f && h(c.closeFrame(1006, "JSONP script loaded abnormally (onreadystatechange)"))
        }
      }
      if (typeof f.async === "undefined" && a.attachEvent) {
        if (!/opera/i.test(navigator.userAgent)) {
          try {
            f.htmlFor = f.id, f.event = "onclick"
          } catch (k) {}
          f.async = !0
        } else g = a.createElement("script"), g.text = "try{var a = document.getElementById('" + f.id + "'); if(a)a.onerror();}catch(x){};", f.async = g.async = !1
      }
      typeof f.async !== "undefined" && (f.async = !0), e = setTimeout(function() {
        h(c.closeFrame(1006, "JSONP script loaded abnormally (timeout)"))
      }, 35e3)
      var l = a.getElementsByTagName("head")[0]
      return l.insertBefore(f, l.firstChild), g && l.insertBefore(g, l.firstChild), h
    },
    E = y["jsonp-polling"] = function(a, b) {
      c.polluteGlobalNamespace()
      var d = this
      d.ri = a, d.trans_url = b, d.send_constructor(B), d._schedule_recv()
    }
  E.prototype = new A(), E.prototype._schedule_recv = function() {
    var a = this,
      b = function(b) {
        a._recv_stop = null, b && (a._is_closing || a.ri._didMessage(b)), a._is_closing || a._schedule_recv()
      }
    a._recv_stop = F(a.trans_url + "/jsonp", D, b)
  }, E.enabled = function() {
    return !0
  }, E.need_body = !0, E.prototype.doCleanup = function() {
    var a = this
    a._is_closing = !0, a._recv_stop && a._recv_stop(), a.ri = a._recv_stop = null, a.send_destructor()
  }
  var F = function(a, d, e) {
      var f = "a" + c.random_string(6),
        g = a + "?c=" + escape(h + "." + f),
        i = 0,
        j = function(a) {
          switch (i) {
            case 0:
              delete b[h][f], e(a)
              break
            case 1:
              e(a), i = 2
              break
            case 2:
              delete b[h][f]
          }
        },
        k = d(g, j)
      b[h][f] = k
      var l = function() {
        b[h][f] && (i = 1, b[h][f](c.closeFrame(1e3, "JSONP user aborted read")))
      }
      return l
    },
    G = function() {}
  G.prototype = new A(), G.prototype.run = function(a, b, c, d, e) {
    var f = this
    f.ri = a, f.trans_url = b, f.send_constructor(C(e)), f.poll = new $(a, d, b + c, e)
  }, G.prototype.doCleanup = function() {
    var a = this
    a.poll && (a.poll.abort(), a.poll = null)
  }
  var H = y["xhr-streaming"] = function(a, b) {
    this.run(a, b, "/xhr_streaming", bd, c.XHRCorsObject)
  }
  H.prototype = new G(), H.enabled = function() {
    return b.XMLHttpRequest && "withCredentials" in new XMLHttpRequest() && !/opera/i.test(navigator.userAgent)
  }, H.roundTrips = 2, H.need_body = !0
  var I = y["xdr-streaming"] = function(a, b) {
    this.run(a, b, "/xhr_streaming", bd, c.XDRObject)
  }
  I.prototype = new G(), I.enabled = function() {
    return !!b.XDomainRequest
  }, I.roundTrips = 2
  var J = y["xhr-polling"] = function(a, b) {
    this.run(a, b, "/xhr", bd, c.XHRCorsObject)
  }
  J.prototype = new G(), J.enabled = H.enabled, J.roundTrips = 2
  var K = y["xdr-polling"] = function(a, b) {
    this.run(a, b, "/xhr", bd, c.XDRObject)
  }
  K.prototype = new G(), K.enabled = I.enabled, K.roundTrips = 2
  var L = function() {}
  L.prototype.i_constructor = function(a, b, d) {
    var e = this
    e.ri = a, e.origin = c.getOrigin(d), e.base_url = d, e.trans_url = b
    var f = d + "/iframe.html"
    e.ri._options.devel && (f += "?t=" + +(new Date())), e.window_id = c.random_string(8), f += "#" + e.window_id, e.iframeObj = c.createIframe(f, function(a) {
      e.ri._didClose(1006, "Unable to load an iframe (" + a + ")")
    }), e.onmessage_cb = c.bind(e.onmessage, e), c.attachMessage(e.onmessage_cb)
  }, L.prototype.doCleanup = function() {
    var a = this
    if (a.iframeObj) {
      c.detachMessage(a.onmessage_cb)
      try {
        a.iframeObj.iframe.contentWindow && a.postMessage("c")
      } catch (b) {}
      a.iframeObj.cleanup(), a.iframeObj = null, a.onmessage_cb = a.iframeObj = null
    }
  }, L.prototype.onmessage = function(a) {
    var b = this
    if (a.origin !== b.origin) return
    var c = a.data.slice(0, 8),
      d = a.data.slice(8, 9),
      e = a.data.slice(9)
    if (c !== b.window_id) return
    switch (d) {
      case "s":
        b.iframeObj.loaded(), b.postMessage("s", JSON.stringify([y.version, b.protocol, b.trans_url, b.base_url]))
        break
      case "t":
        b.ri._didMessage(e)
    }
  }, L.prototype.postMessage = function(a, b) {
    var c = this
    c.iframeObj.post(c.window_id + a + (b || ""), c.origin)
  }, L.prototype.doSend = function(a) {
    this.postMessage("m", a)
  }, L.enabled = function() {
    var a = navigator && navigator.userAgent && navigator.userAgent.indexOf("Konqueror") !== -1
    return (typeof b.postMessage === "function" || typeof b.postMessage === "object") && !a
  }
  var M, N = function(a, d) {
      parent !== b ? parent.postMessage(M + a + (d || ""), "*") : c.log("Can't postMessage, no parent window.", a, d)
    },
    O = function() {}
  O.prototype._didClose = function(a, b) {
    N("t", c.closeFrame(a, b))
  }, O.prototype._didMessage = function(a) {
    N("t", a)
  }, O.prototype._doSend = function(a) {
    this._transport.doSend(a)
  }, O.prototype._doCleanup = function() {
    this._transport.doCleanup()
  }, c.parent_origin = undefined, y.bootstrap_iframe = function() {
    var d
    M = a.location.hash.slice(1)
    var e = function(a) {
      if (a.source !== parent) return
      typeof c.parent_origin === "undefined" && (c.parent_origin = a.origin)
      if (a.origin !== c.parent_origin) return
      var e = a.data.slice(0, 8),
        f = a.data.slice(8, 9),
        g = a.data.slice(9)
      if (e !== M) return
      switch (f) {
        case "s":
          var h = JSON.parse(g),
            i = h[0],
            j = h[1],
            k = h[2],
            l = h[3]
          i !== y.version && c.log('Incompatibile SockJS! Main site uses: "' + i + '", the iframe:' + ' "' + y.version + '".')
          if (!c.flatUrl(k) || !c.flatUrl(l)) {
            c.log("Only basic urls are supported in SockJS")
            return
          }
          if (!c.isSameOriginUrl(k) || !c.isSameOriginUrl(l)) {
            c.log("Can't connect to different domain from within an iframe. (" + JSON.stringify([b.location.href, k, l]) + ")")
            return
          }
          d = new O(), d._transport = new O[j](d, k, l)
          break
        case "m":
          d._doSend(g)
          break
        case "c":
          d && d._doCleanup(), d = null
      }
    }
    c.attachMessage(e), N("s")
  }
  var P = function(a, b) {
    var d = this
    c.delay(function() {
      d.doXhr(a, b)
    })
  }
  P.prototype = new f(["finish"]), P.prototype.doXhr = function(a, b) {
    var d = this,
      e = (new Date()).getTime(),
      f = new b("GET", a + "/info"),
      g = c.delay(8e3, function() {
        f.ontimeout()
      })
    f.onfinish = function(a, b) {
      clearTimeout(g), g = null
      if (a === 200) {
        var c = (new Date()).getTime() - e,
          f = JSON.parse(b)
        typeof f !== "object" && (f = {}), d.emit("finish", f, c)
      } else d.emit("finish")
    }, f.ontimeout = function() {
      f.close(), d.emit("finish")
    }
  }
  var Q = function(b) {
    var d = this,
      e = function() {
        var a = new L()
        a.protocol = "w-iframe-info-receiver"
        var c = function(b) {
            if (typeof b === "string" && b.substr(0, 1) === "m") {
              var c = JSON.parse(b.substr(1)),
                e = c[0],
                f = c[1]
              d.emit("finish", e, f)
            } else d.emit("finish")
            a.doCleanup(), a = null
          },
          e = {
            _options: {},
            _didClose: c,
            _didMessage: c
          }
        a.i_constructor(e, b, b)
      }
    a.body ? e() : c.attachEvent("load", e)
  }
  Q.prototype = new f(["finish"])
  var R = function() {
    var a = this
    c.delay(function() {
      a.emit("finish", {}, 2e3)
    })
  }
  R.prototype = new f(["finish"])
  var S = function(a) {
      if (c.isSameOriginUrl(a)) return new P(a, c.XHRLocalObject)
      switch (c.isXHRCorsCapable()) {
        case 1:
          return new P(a, c.XHRLocalObject)
        case 2:
          return new P(a, c.XDRObject)
        case 3:
          return new Q(a)
        default:
          return new R()
      }
    },
    T = O["w-iframe-info-receiver"] = function(a, b, d) {
      var e = new P(d, c.XHRLocalObject)
      e.onfinish = function(b, c) {
        a._didMessage("m" + JSON.stringify([b, c])), a._didClose()
      }
    }
  T.prototype.doCleanup = function() {}
  var U = y["iframe-eventsource"] = function() {
    var a = this
    a.protocol = "w-iframe-eventsource", a.i_constructor.apply(a, arguments)
  }
  U.prototype = new L(), U.enabled = function() {
    return "EventSource" in b && L.enabled()
  }, U.need_body = !0, U.roundTrips = 3
  var V = O["w-iframe-eventsource"] = function(a, b) {
    this.run(a, b, "/eventsource", _, c.XHRLocalObject)
  }
  V.prototype = new G()
  var W = y["iframe-xhr-polling"] = function() {
    var a = this
    a.protocol = "w-iframe-xhr-polling", a.i_constructor.apply(a, arguments)
  }
  W.prototype = new L(), W.enabled = function() {
    return b.XMLHttpRequest && L.enabled()
  }, W.need_body = !0, W.roundTrips = 3
  var X = O["w-iframe-xhr-polling"] = function(a, b) {
    this.run(a, b, "/xhr", bd, c.XHRLocalObject)
  }
  X.prototype = new G()
  var Y = y["iframe-htmlfile"] = function() {
    var a = this
    a.protocol = "w-iframe-htmlfile", a.i_constructor.apply(a, arguments)
  }
  Y.prototype = new L(), Y.enabled = function() {
    return L.enabled()
  }, Y.need_body = !0, Y.roundTrips = 3
  var Z = O["w-iframe-htmlfile"] = function(a, b) {
    this.run(a, b, "/htmlfile", bc, c.XHRLocalObject)
  }
  Z.prototype = new G()
  var $ = function(a, b, c, d) {
    var e = this
    e.ri = a, e.Receiver = b, e.recv_url = c, e.AjaxObject = d, e._scheduleRecv()
  }
  $.prototype._scheduleRecv = function() {
    var a = this,
      b = a.poll = new a.Receiver(a.recv_url, a.AjaxObject),
      c = 0
    b.onmessage = function(b) {
      c += 1, a.ri._didMessage(b.data)
    }, b.onclose = function(c) {
      a.poll = b = b.onmessage = b.onclose = null, a.poll_is_closing || (c.reason === "permanent" ? a.ri._didClose(1006, "Polling error (" + c.reason + ")") : a._scheduleRecv())
    }
  }, $.prototype.abort = function() {
    var a = this
    a.poll_is_closing = !0, a.poll && a.poll.abort()
  }
  var _ = function(a) {
    var b = this,
      d = new EventSource(a)
    d.onmessage = function(a) {
      b.dispatchEvent(new e("message", {
        data: unescape(a.data)
      }))
    }, b.es_close = d.onerror = function(a, f) {
      var g = f ? "user" : d.readyState !== 2 ? "network" : "permanent"
      b.es_close = d.onmessage = d.onerror = null, d.close(), d = null, c.delay(200, function() {
        b.dispatchEvent(new e("close", {
          reason: g
        }))
      })
    }
  }
  _.prototype = new d(), _.prototype.abort = function() {
    var a = this
    a.es_close && a.es_close({}, !0)
  }
  var ba, bb = function() {
      if (ba === undefined) {
        if ("ActiveXObject" in b) {
          try {
            ba = !!(new ActiveXObject("htmlfile"))
          } catch (a) {}
        } else ba = !1
      }
      return ba
    },
    bc = function(a) {
      var d = this
      c.polluteGlobalNamespace(), d.id = "a" + c.random_string(6, 26), a += (a.indexOf("?") === -1 ? "?" : "&") + "c=" + escape(h + "." + d.id)
      var f = bb() ? c.createHtmlfile : c.createIframe,
        g
      b[h][d.id] = {
        start: function() {
          g.loaded()
        },
        message: function(a) {
          d.dispatchEvent(new e("message", {
            data: a
          }))
        },
        stop: function() {
          d.iframe_close({}, "network")
        }
      }, d.iframe_close = function(a, c) {
        g.cleanup(), d.iframe_close = g = null, delete b[h][d.id], d.dispatchEvent(new e("close", {
          reason: c
        }))
      }, g = f(a, function(a) {
        d.iframe_close({}, "permanent")
      })
    }
  bc.prototype = new d(), bc.prototype.abort = function() {
    var a = this
    a.iframe_close && a.iframe_close({}, "user")
  }
  var bd = function(a, b) {
    var c = this,
      d = 0
    c.xo = new b("POST", a, null), c.xo.onchunk = function(a, b) {
      if (a !== 200) return
      for (;;) {
        var f = b.slice(d),
          g = f.indexOf("\n")
        if (g === -1) break
        d += g + 1
        var h = f.slice(0, g)
        c.dispatchEvent(new e("message", {
          data: h
        }))
      }
    }, c.xo.onfinish = function(a, b) {
      c.xo.onchunk(a, b), c.xo = null
      var d = a === 200 ? "network" : "permanent"
      c.dispatchEvent(new e("close", {
        reason: d
      }))
    }
  }
  return bd.prototype = new d(), bd.prototype.abort = function() {
    var a = this
    a.xo && (a.xo.close(), a.dispatchEvent(new e("close", {
      reason: "user"
    })), a.xo = null)
  }, y.getUtils = function() {
    return c
  }, y.getIframeTransport = function() {
    return L
  }, y
}()), "_sockjs_onload" in window && setTimeout(_sockjs_onload, 1), typeof define === "function" && define.amd && define("sockjs", [], function() {
  return SockJS
})
